### Protobuf format details

Protobuf-formatted external sources require:

- `FileDescriptSet`
- Top-level message name

#### `FileDescriptorSet`

The `FileDescriptorSet` encodes the Protobuf messages' schema, which Materialize
needs to decode incoming Protobuf data.

You can generate the `FileDescriptorSet` with `protoc`, e.g.

```shell
protoc --include_imports --descriptor_set_out=SCHEMA billing.proto
```

#### Top-level message

Materialize needs to know which message from your `FileDescriptorSet` is the
top-level message to decode, along with its package name, in the following
format:

```shell
<package name>.<top-level message>
```

For example, if our `FileDescriptorSet` were from a `.proto` file in the
`billing` package, and our top-level message was called `Batch`, our
_message&lowbar;name_ value would be:

```nofmt
billing.Batch
```
